Wielowarstwowe sieci neuronowe
Uczenie za pomocą gotowych pakietów
Będziemy dziś korzystać z zaawansowanego pakietu do sieci neuronowych "Keras".
Instalacja
- Pod Windowsem powinno być wszystko zainstalowane.
- Pod Linuxem można zainstalować lokalnie:
pip install --user keras
- Lub na własnym komputerze:
sudo pip install keras
- Możliwe, że konieczne jest ponowne uruchomienie IPython, jeśli był uruchomiony podczas instalacji.
Dokumentacja
Zadania
MNIST
- Uruchom przykład mnist_mlp.py, warto ew. zmienić liczbę epok do 5
- Przeanalizuj kod za pomocą dokumentacji oraz innych źródeł w internecie i opisz w notebooku:
- Do jakiej postaci autorzy przykładu sprowadzają dane Y_train i Y_test?
- Przedstaw wzór matematyczny na funkcję błędu (pojawiła się na wykładzie)
- Ile warstw ma przykładowy model, jakie są rozmiary macierzy odpowiednich wag. Czy można uzyskać dostęp do tych wag?
- Jakie funkcje aktywacji użyto? Podaj ich wzory, dla RELU stwórz wykres.
- Co to jest Dropout? Czemu służy? Jakie znaczenie ma parametr?
- Zmodyfikuj model:
- Usuń warstwy Dropout, jaki jest efekt?
- Stwórz model odpowiadający 10-klasowej regresji logistycznej (omówiony na wykładzie): jaka jest jakość?
- Stwórz 6-cio warstwowy model o rozmiarach warstw 2500, 2000, 1500, 1000, 500 oraz 10 bez Dropout, użyj wszędzie funkcji aktywacji
tanh
z wyjątkiem ostatniej warstwy, gdzie należy użyć softmax
. Trenuj model przez 10 epok.
- Dodaj warstwy Dropout, porownaj jakość po 10 epokach.
- Zamiast RMSprop użyj algorytm Adagrad, porównaj jakość.
XOR
- Pokaż, że jednowarstowa sieć (z jednym neuronem z sigmoidalną funkcją aktywacji) nie potrafi nauczyć się funkcji XOR ale za to AND i OR. Wykorzystaj funkcję model.predict(...). Przyjmyj, że wartości ≤0.1 to 0 oraz wartości ≥0.9 to 1. Jaka funkcja blędu wydaję sie własciwa?
- Pokaż, że dwuwarstowy perceptron potrafi nauczyć się funkcji XOR. Wykorzystując model typu
Graph
, zbuduj następującą sieć:
x1 -> nh
x2 -> nh
x1 -> no
x2 -> no
nh -> no
Gdzie x1
i x2
to wejscia, nh
to neuron ukryty, no
to neuron wyjściowy. Zwróc uwagę, że połączenia wychodzą poza warstwy. Właściwym trybem łączenia wejść do neuronu wyjściowego to merge_mode='concat'
(skleja wyjścia poprzednich warstw podanych w inputs=[w1, w2]
w jeden ciąg).
- Uwaga: Konieczna jest duża liczba epok, ok. 10000. Zbior trenujący to tylko 4 przykłady, zatem to pójdzie szybko.